Grails - ElasticSearch - QueryParsingException[[index] No query registered for [query]]; with elasticSearchHelper; JSON via curl works fine though

Posted by v1p on Stack Overflow See other posts from Stack Overflow or by v1p
Published on 2013-06-29T10:19:29Z Indexed on 2013/06/29 10:21 UTC
Read the original article Hit count: 200

Filed under:
|

I have been working on a Grails project, clubbed with ElasticSearch ( v 20.6 ), with a custom build of elasticsearch-grails-plugin(to support geo_point indexing : v.20.6) have been trying to do a filtered Search, while using script_fields (to calculate distance). Following is Closure & the generated JSON from the GXContentBuilder :

Closure

records = Domain.search(searchType:'dfs_query_and_fetch'){
            query {                
                filtered = {
                    query = {
                        if(queryTxt){
                            query_string(query: queryTxt)
                        }else{
                            match_all {}
                        }
                    }
                    filter = {
                        geo_distance = {
                            distance = "${userDistance}km"
                        "location"{
                                lat = latlon[0]?:0.00
                                lon = latlon[1]?:0.00
                            }
                        }
                    }
                }
            }
            script_fields = {
                distance = {
                    script = "doc['location'].arcDistanceInKm($latlon)"
                }
            }
            fields = ["_source"]
        }

GXContentBuilder generated query JSON :

{
"query": {
    "filtered": {
        "query": {
            "match_all": {}
        },
        "filter": {
            "geo_distance": {
                "distance": "5km",
                "location": {
                    "lat": "37.752258",
                    "lon": "-121.949886"
                }
            }
        }
    }
},
"script_fields": {
    "distance": {
        "script": "doc['location'].arcDistanceInKm(37.752258, -121.949886)"
    }
},
"fields": ["_source"]
}

The JSON query, using curl-way, works perfectly fine. But when I try to execute it from Groovy Code, I mean with this :

 elasticSearchHelper.withElasticSearch { Client client ->
        def response = client.search(request).actionGet()
 }

It throws following error :

Failed to execute phase [dfs], total failure; shardFailures {[1][index][3]: SearchParseException[[index][3]: from[0],size[60]: Parse Failure [Failed to parse source [{"from":0,"size":60,"query_binary":"eyJxdWVyeSI6eyJmaWx0ZXJlZCI6eyJxdWVyeSI6eyJtYXRjaF9hbGwiOnt9fSwiZmlsdGVyIjp7Imdlb19kaXN0YW5jZSI6eyJkaXN0YW5jZSI6IjVrbSIsImNvbXBhbnkuYWRkcmVzcy5sb2NhdGlvbiI6eyJsYXQiOiIzNy43NTIyNTgiLCJsb24iOiItMTIxLjk0OTg4NiJ9fX19fSwic2NyaXB0X2ZpZWxkcyI6eyJkaXN0YW5jZSI6eyJzY3JpcHQiOiJkb2NbJ2NvbXBhbnkuYWRkcmVzcy5sb2NhdGlvbiddLmFyY0Rpc3RhbmNlSW5LbSgzNy43NTIyNTgsIC0xMjEuOTQ5ODg2KSJ9fSwiZmllbGRzIjpbIl9zb3VyY2UiXX0=","explain":true}]]]; nested: QueryParsingException[[index] No query registered for [query]]; }

The above Closure works if I only use filtered = { ... } script_fields = { ... } but it doesn't return the calculated distance.

Anyone had any similar problem ?

Thanks in advance :)

It's possible that I might have been dim to point out the obvious here :P

© Stack Overflow or respective owner

Related posts about grails

Related posts about elasticsearch